home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / alpha.arc / NETROM.H < prev    next >
C/C++ Source or Header  |  1988-07-26  |  5KB  |  158 lines

  1. /* net/rom support definitions
  2.  * Dan Frank, W9NK
  3.  */
  4.  
  5. #define NR3HLEN        15    /* length of a net/rom level 3 hdr, */
  6. #define NR3DLEN        241    /* max data size in net/rom l3 packet */
  7. #define NR3NODESIG    0xff    /* signature for nodes broadcast */
  8. #define NR3NODEHL    7    /* nodes bc header length */
  9.  
  10. #define NRNUMIFACE    10    /* number of interfaces associated */
  11.                 /* with net/rom network layer      */
  12. #define NRNUMCHAINS    17    /* number of chains in the */
  13.                 /* neighbor and route hash tables */
  14. #define NRRTDESTLEN    21    /* length of destination entry in */
  15.                 /* nodes broadcast */
  16. #define NRDESTPERPACK    11    /* maximum number of destinations per */
  17.                 /* nodes packet */
  18.  
  19. /* Internal representation of net/rom network layer header */
  20. struct nr3hdr {
  21.     struct ax25_addr source ;    /* callsign of origin node */
  22.     struct ax25_addr dest ;        /* callsign of destination node */
  23.     unsigned ttl ;            /* time-to-live */
  24. } ;
  25.  
  26. /* Internal representation of net/rom routing broadcast destination */
  27. /* entry */
  28. struct nr3dest {
  29.     struct ax25_addr dest ;        /* destination callsign */
  30.     char alias[7] ;            /* ident, upper case ASCII, blank-filled */
  31.     struct ax25_addr neighbor ;    /* best-quality neighbor */
  32.     unsigned quality ;        /* quality of route for this neighbor */
  33. } ;
  34.  
  35.  
  36. /* net/rom interface table entry */
  37. struct nriface {
  38.     struct interface *interface ;    /* pointer to ax.25 interface */
  39.     char alias[7] ;            /* alias for this interface's node */
  40.                     /* broadcasts */
  41.     unsigned quality ;        /* net/rom link quality estimate */
  42. } ;
  43.  
  44. /* net/rom neighbor table structure */
  45. struct nrnbr_tab {
  46.     struct nrnbr_tab *next ;    /* doubly linked list pointers */
  47.     struct nrnbr_tab *prev ;
  48.     char call[AXALEN*3] ;        /* call of neighbor + 2 digis max */
  49.     unsigned interface ;        /* offset of neighbor's port in */
  50.                     /* interface table */
  51.     unsigned refcnt ;        /* how many routes for this neighbor? */
  52. } ;
  53.  
  54. #define    NULLNTAB    (struct nrnbr_tab *)0
  55.  
  56.  
  57. /* A list of these structures is provided for each route table */
  58. /* entry.  They bind a destination to a neighbor node.  If the */
  59. /* list of bindings becomes empty, the route table entry is    */
  60. /* automatically deleted.                                       */
  61.  
  62. struct nr_bind {
  63.     struct nr_bind *next ;        /* doubly linked list */
  64.     struct nr_bind *prev ;
  65.     unsigned quality ;        /* quality estimate */
  66.     unsigned obsocnt ;        /* obsolescence count */
  67.     unsigned flags ;
  68. #define    NRB_PERMANENT    0x01        /* entry never times out */
  69.     struct nrnbr_tab *via ;        /* route goes via this neighbor */
  70. } ;
  71.  
  72. #define    NULLNRBIND    (struct nr_bind *)0
  73.  
  74.  
  75. /* net/rom routing table entry */
  76.  
  77. struct nrroute_tab {
  78.     struct nrroute_tab *next ;    /* doubly linked list pointers */
  79.     struct nrroute_tab *prev ;
  80.     char alias[7] ;            /* alias of node */
  81.     struct ax25_addr call ;        /* callsign of node */
  82.     unsigned num_routes ;        /* how many routes in bindings list? */
  83.     struct nr_bind *routes ;    /* list of neighbors */
  84.  
  85. } ;
  86.  
  87. #define    NULLNRRTAB    (struct nrroute_tab *)0
  88.  
  89.  
  90. /* The net/rom nodes broadcast filter structure */
  91. struct nrnf_tab {
  92.     struct nrnf_tab *next ;        /* doubly linked list */
  93.     struct nrnf_tab *prev ;
  94.     struct ax25_addr neighbor ;    /* call of neighbor to filter */
  95.     unsigned interface ;        /* filter on this interface */
  96. } ;
  97.  
  98. #define    NULLNRNFTAB    (struct nrnf_tab *)0
  99.  
  100.  
  101. /* The interface table */
  102. extern struct nriface nrifaces[NRNUMIFACE] ;
  103.  
  104. /* How many interfaces are in use */
  105. extern unsigned nr_numiface ;
  106.  
  107. /* The neighbor hash table (hashed on neighbor callsign) */
  108. extern struct nrnbr_tab *nrnbr_tab[NRNUMCHAINS] ;
  109.  
  110. /* The routes hash table (hashed on destination callsign) */
  111. extern struct nrroute_tab *nrroute_tab[NRNUMCHAINS] ;
  112.  
  113. /* The nodes broadcast filter table */
  114. extern struct nrnf_tab *nrnf_tab[NRNUMCHAINS] ;
  115.  
  116. /* filter modes: */
  117. #define    NRNF_NOFILTER    0    /* don't filter */
  118. #define    NRNF_ACCEPT    1    /* accept broadcasts from stations in list */
  119. #define    NRNF_REJECT    2    /* reject broadcasts from stations in list */
  120.  
  121. /* The filter mode */
  122. extern unsigned nr_nfmode ;
  123.  
  124. /* The time-to-live for net/rom network layer packets */
  125. extern unsigned nr_ttl ;
  126.  
  127. /* The obsolescence count initializer */
  128. extern unsigned obso_init ;
  129.  
  130. /* The threshhold at which routes becoming obsolete are not broadcast */
  131. extern unsigned obso_minbc ;
  132.  
  133. /* The quality threshhold below which routes in a broadcast will */
  134. /* be ignored */
  135. extern unsigned nr_autofloor ;
  136.  
  137. /* The maximum number of routes maintained for a destination. */
  138. /* If the list fills up, only the highest quality routes are  */
  139. /* kept.  This limiting is done to avoid possible over-use of */
  140. /* memory for routing tables in closely spaced net/rom networks. */
  141. extern unsigned nr_maxroutes ;
  142.  
  143. /* The netrom pseudo-interface */
  144. extern struct interface *nr_interface ;
  145.  
  146. /* Functions */
  147. extern struct nrroute_tab *find_nrroute(struct ax25_addr *) ;
  148. extern struct nrnbr_tab *find_nrnbr(struct ax25_addr *, unsigned) ;
  149. extern struct nrnf_tab *find_nrnf(struct ax25_addr *, unsigned) ;
  150. extern int nr_routeadd(char *, struct ax25_addr *, unsigned,
  151.                        unsigned, char *, unsigned) ;
  152. extern int nr_routedrop(struct ax25_addr *, struct ax25_addr *, unsigned) ;
  153. extern int nr_nfadd(struct ax25_addr *, unsigned) ;
  154. extern int nr_nfdrop(struct ax25_addr *, unsigned) ;
  155. extern char *nr_getroute(struct ax25_addr *) ;
  156. extern int ntohnrdest(struct nr3dest *,struct mbuf **) ;
  157. extern struct mbuf *htonnrdest(struct nr3dest *) ;
  158.